home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
ab20
/
ab20_archive
/
utilities
/
shells
/
csh519g.lha
/
demo.sh
< prev
next >
Wrap
Text File
|
1991-12-30
|
13KB
|
459 lines
# Dies hier ist ein Kommentar.
# --------------------------- Hauptmenu ------------------------------
# Nachsehen, ob wir hier eine Csh 5.16 ode rhöher am Werke haben.
# Die Variable $_version enthält die aktuelle Version, ein 'return'
# Kommando beendet eine Stapeldatei.
if $_version < 516
echo "Schade, Csh Version 5.16 wird benötigt!";return 0
endif
cls # löscht Schirm.
# Das Echo Kommando wird benutzt eine Zeile auf den Schirm zu schreiben.
# Achtung, ein schliessendes Anführungszeichen ist nicht notwendig.
echo "Das ist eine Beispiel Stapeldatei der Csh. Sie enthält eine Menge
echo "nützlicher Aliase die Sie vielleicht fest installieren wollen,
echo "aber der Hauptzweck ist es, als Anleitung zu dienen. Sehen Sie sich
echo "um und verändern Sie nach belieben.
echo
# Jedes Csh KOmmando akzeptiert ^-Kode in seiner Kommandozeile, z.B.
# ist ^A dasselbe wie CTRL-A, welches den ASCII Kode 1 repräsentiert.
# Das kann benutzt werden, um z.B. ESC-Sequenzen zu generieren.
echo -n ^[[30m^[[41m # reverse Schrift, kein CR
echo -n @center( " C H O I C E S " 76 ) # zentrierte Ausgabe
echo ^[[0m
echo
echo "[1] Primzahlen
echo "[2] 'More' Textanzeiger
echo "[3] Labyrinth Spiel
echo "[4] Türme von Hanoi Spiel
echo "[5] Backup/Versions Kontroll System
echo "[6] Sinnvolle Aliase
echo "[7] Mansplit, trennt ihre Csh-Anleitung auf.
# Das 'input' Kommando liest eine Zeile von der Konsole und speichert
ä diese in der angegebenen Variablen.
echo -n "> "
input wahl
goto Start$wahl# Springt zu den Marken Start1, Start2, etc.
# ------------------------- Primzahlen -----------------------------
# Das interessante an diesem Programm ist die Nutzung des 'fornum'
# Kommandos und der Trick eine Matrix zu generieren. Die Information
# ob 93 eine Primzahl ist, wird in der Variablen $prime93 gespeichert.
label Start1 # Startpunkt... Hierhin wird vom obigen Goto gesprungen
set max 100 # Höchste Zahl die auf Prim getestet werden soll
echo "Berechne Primzahlen von 1 bis"$max
fornum i 2 $max "set prime$i 1
# Jetzt folgt ein Kommandoblock. Alles wird intern zu einer Kommandozeile
# verknüpft, getrennt durch Semikola. Deshalb sind schliessende
# Anführungszeichen Pflicht, und Kommentare verboten.
fornum i 2 $max {
exec "set bool $prime"$i
if $bool
echo -n $i^i
fornum -s j $i $max $i "set prime$j 0"
endif
}
echo
return 0
# ------------------------------ More -------------------------------
# Diese Stapeldatei macht in etwa das, was auch das Programm 'More' tut.
# Es demonstriert die Datei Ein- und Ausgabe-Kommandos und Datei
# Behandlungsfunktionen.
label Start2
# Der Hilfstext für 'More', als Alias definiert.
alias morehelp {
echo " Leertaste Eine Seite weiter"
echo " Enter Eine Zeile weiter"
echo " Backspace Eine Seite zurück"
echo " < An Anfang der Datei"
echo " > An Ende der Datei"
echo " ESC, q Ende"
echo " h Hilfe"
}
echo "Das ist eine Annäherung eines Textanzeiger als Csh Stapeldatei.
echo "Funktionen:"
echo
morehelp
echo
echo -n "Geben Sie den Namen der anzusehenden Datei ein:"
input text
#set text test
if -nf $text;echo "Datei nicht gefunden.";return 20;endif
# Hier wird die Datei in den Speicher eingeladen. Jede Zeile wird als
# ein 'Wort' eingelesen, selbst wenn sie Leerzeichen beinhält. Für die
# Wort-Definierung bitte in der csh.doc Anleitung nachsehen.
readfile file $text
# Jeder Gebrauch von $file wird von nun an eine GROSSE Kommandozeile
# erbeben.
set pos 1
set page @rpn( @winrows( ) 1 - )
set lines @flines( file )
set bottom @rpn( $lines $page - 1 + )
label Disp
cls
set screen @subfile( file $pos $page ) # Schirmposition in $screen absichern
writefile screen
# Berechnung, Anzeige der Prozent
set perc @rpn( $pos $page + 1 - 100 \* $lines / 100 MIN )
echo -n ^[[3m^[[30m^[[41m "-- More -- ("$perc"%)"^[[0m ""
input -r c # Wartet auf einen einfachen Tastenduck ohne CR
set c x$c # Hält das 'if' davon ab ein '<' misszuverstehen.
if $c = x" ";if $pos = $bottom;unset file;return 0;endif;endif
if $c = x" ";inc pos $page;if $pos > $bottom;set pos $bottom;endif;endif
if $c = x^m ;inc pos 1 ;if $pos > $bottom;set pos $bottom;endif;endif
if $c = x^h ;dec pos $page;if $pos < 1;set pos 1;endif;endif
if $c = x"<";set pos 1;endif
if $c = x">";set pos $bottom;endif
if $c = xq ;unset file;return 0;endif
if $c = x^[ ;unset file;return 0;endif
if $c = xh ;cls;morehelp;echo "Bitte Taste drücken.";input -r a;endif
#if $c = x/ ;set char xf;endif
#if $c = xf
# echo -n "Zeichenkette: ";input str;search -fq $text $str | input found;
# set found @subwords( $found 2 1000 );set c xn
#endif
#if $c = xn
# set hop 0
# foreach i ( $found ) "if $i > $pos;if $hop = 0;set hop $i;endif;endif
# if $hop;set pos $hop;endif
#endif
goto Disp
# ---------------------------- Labyrinth -------------------------------
# Ich wollte schon immer mal ein Action Game als Stapeldatei schreiben :-)
# Das Labyrinth ist als eine Zeichenkette abgespeichert, jede Zeile als
# ein Wort. Ändern Sie es nach Ihrem belieben, die Größe wird automatisch
# angepasst. Bitte keine automatische Tastenwiederholung einsetzen.
label Start3
set lab "#########################"
set lab $lab "# # # # # #"
set lab $lab "# # # ### ### ### # ### #"
set lab $lab "# # # # # # # #"
set lab $lab "# ##### ### ### ### # ###"
set lab $lab "# # # # # # #"
set lab $lab "### # ### ### # # ##### #"
set lab $lab "# # # # "
set lab $lab "#########################"
cls
writefile lab
echo -n ^j"8=hoch 2=runter 4=links 6=rechts "^j^[[2A
set x 2
set y 2
set wid @strlen( @word( $lab 1 ) )
set up @words( $lab )
echo -n ^[[$up\A^[[B^[[C.^[[D
alias test "%a%b set xx @rpn( $x $a + );set yy @rpn( $y $b + );\
set f @strmid( @word( $lab $yy ) $xx 1 )
date -s
label Loop
input -r c
if $c = 8;test 0 -1;if -n $f = "#";echo -n " "^H^[[A.^H;dec y;endif;endif
if $c = 2;test 0 1;if -n $f = "#";echo -n " "^H^[[B.^H;inc y;endif;endif
if $c = 6;test 1 0;if -n $f = "#";echo -n " "^H^[[C.^H;inc x;endif;endif
if $c = 4;test -1 0;if -n $f = "#";echo -n " "^H^[[D.^H;dec x;endif;endif
if $x >= $wid;cls;echo Glückwunsch, freigekommen in `date -r` Sekunden.
return 0
endif
goto Loop
return 0
# ------------------------------ Türme von Hanoi -----------------------
# Dieses Spiel wurde auf Geschwindigkeit optimiert, es sieht daher nicht
# so toll aus.
label Start4
set height 7 # Setze auf ungerade Zahlen bis 7
set h2 $height;inc h2
cls
unset t
set t1 "9"; set t2 "9"; set t3 "9" # die drei Türme
fornum -s i $h2 2 -1 "set t1 $i$t1
set done $t1
#Anzeige vorbereiten
set im "x";set h @rpn( $height 2 \* 1 + )
fornum -s i 1 $h 2 "set im $im @center( @strleft( XXXXXXXXXXXXXXX $i ) $h )
fornum i $height 10 "set im $im \" \"
cls
echo
echo "T Ü R M E V O N H A N O I
echo "---------------------------
echo
echo "Das Spiel ist nicht sehr komfortable, aber es funktioniert ganz gut.
echo "Sie müssen einen Stapel von Scheiben von dem ersten Turm auf den
echo "dritten Umlegen, ohne dabei eine grössere Scheibe auf eine kleinere
echo "zu legen. Um eine Scheibe von Turm 1 auf den Turm 3 zu bewegen, drücken
echo "Sie erst '1' dann '3'. Sind Sie fertig, wird die benötigte Zeit
echo "ausgegeben, nach CTRL-C wird das Spiel beendet. Sie werden keine
echo "andere Ausgabe als die Türme sehen, solange das Spiel läuft.
echo
echo "PS: Teilen Sie mir mit, wenn Sie unter 60 Sekunden bleiben *grins*
echo
echo "Bitte eine Taste drücken, wenn fertig."
input -r x
date -s
cls
#display stack
fornum i 2 $h2 "echo \" \" @word( $im $i )
echo
set m1 1;set m2 17;set m3 33
forever {
label Disp
input -r x;input -r y
exec "set src $t"$x";set dst $t"$y";set rt1 $m"$x";set rt2 $m"$y
strleft move $src 1
if a$move""a >= a$dst""b
echo -n ^g
else
strlen up1 $src; strlen up2 $dst; inc up2
echo -n \233$up1""A\233$rt1""C" "^m\233$up1""B\
\233$up2""A\233$rt2""C @word( $im $move ) ^m\233$up2""B
set t$y $move$dst
strmid t$x $src 2
endif
if $t3 = $done;echo ^j^j;date -r;endif
}
return 0
# ---------------------- Backup/Version control -------------------------------
# Das ist eine Stapeldatei, die Sie vielleicht wirklich regelmäßig
# anwenden wollen. Sie kopiert (backup) eine Menge von Dateien in einen
# anderen Ordner, dabei werden alte Versionen nicht überschrieben.
# Trennen Sie diese Stapeldatei heraus, und rufen Sie es aus .login
# oder woher auch immer aufm wenn Sie ihre C-Programmierumgebung
# installieren. Wird die Verzögerung auf 0 gesetzt, stellen Sie sicher
# das diese Stapeldatei immer ausgeführt wird.
label Start5
set versions 3 # Maximale Anzahl alter zu behaltender Versionen
set delay 1 # Minimale Anzahl Tage zwischen den Kopien
set dest bak # Der Zielordner der Kopien
set pattern "*.c *.h" # Das Suchmuster für zu kopierende Dateien
set exlude "x.c y.c" # Nicht zu kopierende Dateien
#----- Umgebung setzen -----
if -nd $dest
echo -n "Ordner "$dest" existiert nicht... erstellen? y/n: ";input x
if $x = y;mkdir $dest;else;echo "Beendet...";return 0;endif
endif
if -f $dest/timestamp
set last @age( $dest/timestamp )
if $last < $delay
echo "Keine Kopie erstellt... Letze erstelle Kopie ist "$last" Tag(e) alt."
return 0
endif
else
echo >$dest/timestamp
endif
#----- Teste auf geänderte Dateien ----
echo "Teste Dateien...."
exec set all $pattern # Hier wird das Suchmuster expandiert
set cp "" # Zu kopierende Dateien
foreach i ( $all ) "if -nt $i $dest/$i;set cp $cp $i;endif
exec set exclude $exclude # Die exklusiven Dateien werden expandiert
set cp @without( $cp , $exclude )
if $cp = "";echo "Fertig.";touch $dest/timestamp;return 0;endif
echo "Zu kopierende Dateien:"
echo $cp
# Löschen Sie das Kommentarzeichen um einen Sicherheitscheck erfolgen zu
# lassen.
# set cp @confirm( Backup $cp )
if $cp = "";echo "Fertig.";touch $dest/timestamp;return 0;endif
#------ Kopien erstellen -------
alias name "%a set n $dest/$i;if $a;set n $n.$a;endif
foreach i ( $cp ) {
set v $versions;dec v
name $v;dec v
if -f $n;rm $n;endif
fornum -s j $v 0 -1 "set hi $n;name $j;if -f $n;mv $n $hi;endif"
cp $i $dest
}
touch $dest/timestamp
echo "Fertig."
return 0
# ---------------------- Hilfsreiche Aliase --------------------------
# Lesen Sie die Kommentare eines jeden Alias, um herauszufinden, ob
# das Alias für Sie hilfsreich ist. Kopieren Sie es dann in die login
# Datei.
label Start6
# Ein paar nützliche Aliase für das dir Kommando
alias d "*a dir @pickopts( $a ) -ze \"%6s %-.12n%m\" @pickargs( $a )
alias lst "*a ls -t $a" # sortiert nach Alter
alias lsl "*a ls -l $a" # sortiert nach Länge
alias move "cp -m
# sc searches *.c, even 'sc -c main()' works
alias sc "%a search @pickopts( $a ) *.c @pickargs( $a )
# edf editiert eine Funktion im CygnusEd wenn der Name in der ersten
# Zeile angegeben wird:
alias edf {
%func
set b ""
search -afl *.c $func | inp b
if $b
split b file line
lced $file
waitforport rexx_ced
inc line 1
rxsend rexx_ced "jump to file "$file "jumpto "$line" 0"
else
echo Not found
endif
}
# Diese Aliase unterdrücken Suchmuster Expandierng in einigen Kommandos
alias zoo "*a Zoo $a
alias lharc "*a Lharc $a
alias lz "*a Lz $a
alias newlist "*a Newlist $a
alias eval "*a Eval $a
# Dieses hier wird alle Bilder anzeigen, das neueste zuerst.
alias newpix "ls -nt | forline i STDIN \"ShowIFF $i
# Wollen Sie ein Csh Kommando mit 'run' im Hintergrund starten, benutzen
# sie dieses Alias:
alias rs "rback csh -c
# Ein paar Aliase für die UNIX Freunde unter uns
# Dieses Alias ahmt das chmod Kommando nach, welches die Bits zuerst und
# dann erst die Dateien erwartet:
alias chmod "%a protect @subwords( $a 2 9999 ) @first( $a )
# Genauso bei grep:
alias grep "%a search @subwords( $a 2 9999 ) @first( $a )
# pushd schiebt den aktuellen Ordner auf den Stack
set stk ""
alias pushd "%a set stk $_cwd @subwords( $stk 1 10 );\\cd $a;e $stk
# popd holt den mit pushd erzeugten Ordner, und wechselt dorthin
alias popd "\\cd @first( $stk );set stk @subwords( $stk 2 10 );e $stk
echo "Hilfsreiche Aliase erzeugt. Lesen Sie diese Stapeldatei um
echo "herauszufinden ob ein paar für Sie sinnvolle dabei sind.
return 0
# ----------------------- Mansplit.sh - Trennt das csh.doc -------------
# Trennt das csh.doc in kleine Dateien auf, eins pro Hilfseintrag.
# So können externe 'Man' Kommandos mit ihnen arbeiten, diese sind normal
# schneller als das interne.
label Start7
echo "Ein wenig Geduld...
set dest ram:cshdoc/ # Setzen Sie hier Ihren Ordner ein
if -nd ram:cshdoc;mkdir ram:cshdoc;endif # ...und hier
set mode skip
forline i csh:csh.doc {
if $mode = write
if @strleft( $i^a 1 ) < " "
echo >>$dest$file $i
else
set mode skip
endif
endif
if $mode = skip
if " " = @strleft( $i 4 )
set mode write
set a @index( $i "(" )
if $a > 0;dec a 1;strleft i $i $a;endif
set file $i
echo >$dest$file $i
echo $file
endif
endif
}
echo "csh.doc auftrennung erfolgt im Ordner "$dest
return 0